home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TeX 1995 July
/
TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO
/
macros
/
latex209
/
contrib
/
feynman
/
vertex.tex
< prev
Wrap
Text File
|
1992-07-02
|
18KB
|
400 lines
% VERTEX(25)
% CALLED BY FEYNMAN(34).TEX.
% Vertex functions for FEYNMAN drawn via \drawvertex.
%
\global\advance\vertexcount by 1 % Needed and defined in FEYNMAN19&20.
\newsavebox{\vertexbox}
\global\newcount\LDIRcount % Counts the number of vertices drawn.
\global\newcount\VERTEXNUMBER % 3 or 4; The number of particles in the vertex.
\global\newdimen\VERTEXLINKONE % And now some switches.
\global\newdimen\VERTEXLINKTWO
\global\newdimen\VERTEXLINKTHREE
\global\newdimen\VERTEXLINKFOUR %\clearvertex %sets them to zero
\global\newdimen\VERTEXCAPONE % And now some GLUONCAP switches.
\global\newdimen\VERTEXCAPTWO
\global\newdimen\VERTEXCAPTHREE
\global\newdimen\VERTEXCAPFOUR %\clearvertex %sets them to zero
\global\newdimen\STEMVERTEXONE
\global\newdimen\STEMVERTEXTWO
\global\newdimen\STEMVERTEXTHREE
\global\newdimen\STEMVERTEXFOUR %\clearvertex %sets them to zero
\global\newcount\stemlengthcopy
\global\newcount\vertexonex \global\newcount\vertexoney
\global\newcount\vertextwox \global\newcount\vertextwoy
\global\newcount\vertexthreex \global\newcount\vertexthreey
\global\newcount\vertexfourx \global\newcount\vertexfoury
\global\newcount\vertexmidx \global\newcount\vertexmidy
\global\newcount\VERTEXLINE
\global\newcount\FLIPVERTEX \global\FLIPVERTEX=0
\gdef\flipvertex{\global\FLIPVERTEX=1} %For drawing vertices with flipped lines
\newcount\vertadj \newcount\negvertadj
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% SAMPLE USAGE:
%
% Syntax: \drawvertex<\particletype[\DIRECTION #particles in vertex (3 or 4)]
% (x,y)[\number of loops or half-wiggles]>
% eg: \drawvertex\gluon[\NE 3}(0,10000)[3]
% Where the particle type is either \gluon or \photon
% Direction is \N, \NE, \E...\NW as with drawing lines.
% This is the direction of the initial vertex line which you give
% the co-ords of. For 3-prong vertices the other 2 lines are 90-degrees
% to each other and `opposite' the initial line forming a `Y'.
% For 4-prong vertices an `X' or `+' is formed.
% The initial line begins at co-ords (vertexonex,\vertexoney) and
% are numbered in a clockwise sense so that the next line ends are
% (\vertextwox,\vertextwoy) etc. The point of convergence is at
% (\vertexmidx,\vertexmidy).
% The number of particles will be either 3 (eg: WWZ vertex) or 4.
% Co-ords of directed line as above.
% These then become (\vertexonex,\vertexoney).
% The number of loops each line of a gluon vertex has or the number of half-
% wiggles each line of a general gauge vertex is the final parameter.
%
% To flip the initial (\vertexone) line configuration for a 3-vertex
% or ALL of the lines in a 4-vertex say \flipvertex\drawvertex...
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% CALLING ROUTINES %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
\gdef\drawvertex#1[#2#3](#4,#5)[#6]{
\global\advance\vertexcount by 1 % Counts number of vertices draw.
\global\LINETYPE=#1 % either \gluon or \photon
\global\LINEDIRECTION=#2
\global\VERTEXNUMBER=#3 % either 3 or 4
\global\vertexonex=#4
\global\vertexoney=#5
\global\unitboxnumber=#6
\global\stemlengthcopy=\stemlength % Record use-defined value.
%
% SELECT VERTEX:
%
\ifnum\LINETYPE<3 \LINEERROR \fi
\ifnum\LINETYPE=3 % *** PHOTONS ***
% TEST WHETHER GLUONS HAVE BEEN PREVIOUSLY DRAWN:
\ifnum\gluoncount=0 \def\gluonlink{\relax} \def\gluoncap{\relax} \fi
\ifnum\VERTEXNUMBER<3 \UNIMPERROR \fi
\ifnum\VERTEXNUMBER=3 \THREEPHOTON\fi % 3-PHOTON VERTEX
\ifnum\VERTEXNUMBER=4 \FOURPHOTON \fi % 4-PHOTON VERTEX
\ifnum\VERTEXNUMBER>4 \UNIMPERROR \fi
\fi
\ifnum\LINETYPE=4 % *** GLUONS ***
\ifnum\VERTEXNUMBER<3 \UNIMPERROR \fi
\ifnum\VERTEXNUMBER=3 \THREEGLUON \fi % 3-GLUON VERTEX
\ifnum\VERTEXNUMBER=4 \FOURGLUON \fi % 4-GLUON VERTEX
\ifnum\VERTEXNUMBER>4 \UNIMPERROR \fi
\fi
\ifnum\LINETYPE>4 \LINEERROR \fi
\clearvertex % Resets VERTEXLINKs, VERTEXCAPS etc.
} % END \drawvertex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% PHOTON VERTICES %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
\gdef\advtwomodeight#1{
\global\advance\LDIRcount by2\moduloeight\LDIRcount \diagFOURVERT#1[\LDIRcount]}
%
% %%%%%%%%%%%%%%%%%%%%%%%
% % Three-Photon Vertex %
% %%%%%%%%%%%%%%%%%%%%%%%
\gdef\THREEPHOTON{
\ifcase\LDIR % N vertex
\setvertexA[\S\REG]
\setvertexB[\NW\CURLY](0,0)[2] \setvertexB[\NE\FLIPPEDCURLY](0,0)[3]
\or % NE vertex
\setvertexA[\SW\CURLY]
\setvertexB[\N\REG](70,-100)[2] \setvertexB[\E\FLIPPED](0,0)[3]
\or % E vertex
\setvertexA[\W0]
\setvertexB[\NE\CURLY](20,0)[2] \setvertexB[\SE\FLIPPEDCURLY](20,0)[3]
\or % SE VERTEX
\setvertexA[\NW\CURLY]
\setvertexB[\E\REG](0,0)[2] \setvertexB[\S1](20,100)[3]
\or % S VERTEX
\setvertexA[\N\REG]
\setvertexB[\SE\CURLY](0,0)[2] \setvertexB[\SW\FLIPPEDCURLY](0,0)[3]
\or % SW vertex
\setvertexA[\NE\CURLY]
\setvertexB[\S\REG](-20,100)[2]
\setvertexB[\W\FLIPPED](0,0)[3]
\or % W vertex
\setvertexA[\E\REG]
\setvertexB[\SW\CURLY](0,0)[2] \setvertexB[\NW\FLIPPEDCURLY](0,0)[3]
\or % NW vertex
\setvertexA[\SE\CURLY]
\setvertexB[\W\REG](0,0)[2]
\setvertexB[\N\FLIPPED](-40,-100)[3]
\else \DIRECTERROR
\fi
} %end \THREEPHOTON
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% %%%%%%%%%%%%%%%%%%%%%%
% % Four-Photon Vertex %
% %%%%%%%%%%%%%%%%%%%%%%
\gdef\FOURPHOTON{
\ifnum\LDIR>-1
\global\LDIRcount=\LDIR \global\advance\LDIRcount by 4 \moduloeight\LDIRcount
\setvertexA[\LDIRcount\REG] \advtwomodeight2 \advtwomodeight3 \advtwomodeight4
\else \UNIMPERROR \fi
\global\FLIPVERTEX=0
}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% GLUON VERTICES %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% %%%%%%%%%%%%%%%%%%%%%%
% % Three-Gluon Vertex %
% %%%%%%%%%%%%%%%%%%%%%%
\gdef\THREEGLUON{
\vertadj=0 \adjvert % No special adjustments required for this case.
\ifcase\LDIR % N vertex
\setvertexA[\S\CENTRAL]
\setvertexB[\NW\REG](0,0)[2] \setvertexB[\NE\FLIPPED](0,0)[3]
\or % NE vertex
\setvertexA[\SW\REG]
\setvertexB[\N\CURLY](-170,442)[2] \setvertexB[\E 3](420,-183)[3]
\setvertexC(442,442)[bl]
\or % E vertex
\setvertexA[\W6]
\setvertexB[\NE\REG](0,0)[2] \setvertexB[\SE\FLIPPED](0,0)[3]
\or % SE VERTEX
\setvertexA[\NW\REG]
\setvertexB[\E\CURLY](420,183)[2] \setvertexB[\S3](-183,-442)[3]
\setvertexC(442,-442)[tl]
\or % S VERTEX
\setvertexA[\N\CENTRAL]
\setvertexB[\SE\REG](0,0)[2] \setvertexB[\SW\FLIPPED](0,0)[3]
\or % SW vertex
\setvertexA[\NE\REG]
\setvertexB[\S\CURLY](170,-442)[2]
\setvertexB[\W\FLIPPEDCURLY](-420,183)[3]
\setvertexC(-442,-442)[tr]
\or % W vertex
\setvertexA[\E\CENTRAL]
\setvertexB[\SW\REG](0,0)[2] \setvertexB[\NW\FLIPPED](0,0)[3]
\or % NW vertex
\setvertexA[\SE\REG]
\setvertexB[\W\CURLY](-420,-183)[2]
\setvertexB[\N\FLIPPEDCURLY](170,442)[3]
\setvertexC(-442,442)[br]
\else \DIRECTERROR
\fi
} %end \THREEGLUON
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% %%%%%%%%%%%%%%%%%%%%%
% % Four-Gluon Vertex %
% %%%%%%%%%%%%%%%%%%%%%
%
%
\gdef\FOURGLUON{
\ifodd\LDIR\vertadj=0 \else \vertadj=412 \fi \adjvert
\ifcase\LDIR % N vertex
\setvertexA[\S\CURLY] \MIDADJUST(\negvertadj,\vertadj)
\WFOURVERT2 \NFOURVERT3 \EFOURVERT4
\or \FOURPHOTON % NE vertex
\or % E vertex
\setvertexA[\W\CURLY] \MIDADJUST(\vertadj,\vertadj)
\NFOURVERT2 \EFOURVERT3 \SFOURVERT4
\or \FOURPHOTON % SE VERTEX
\or % S VERTEX
\setvertexA[\N\CURLY] \MIDADJUST(\vertadj,\negvertadj)
\EFOURVERT2 \SFOURVERT3 \WFOURVERT4
\or \FOURPHOTON % SW vertex
\or % W vertex
\setvertexA[\E\CURLY] \MIDADJUST(\negvertadj,\negvertadj)
\SFOURVERT2 \WFOURVERT3 \NFOURVERT4
\or \FOURPHOTON % NW vertex
\else \DIRECTERROR
\fi
\global\FLIPVERTEX=0 % reset \FLIPVERTEX to unflipped case.
} % End of \FOURGLUON
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % % %
% % FOUR GLUON UTILITY ROUTINES: % %
% % % %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \MIDADJUST Adjusts the position of the vertex midpoint and draws the
% central four-gluon pattern.
\gdef\MIDADJUST(#1,#2){
\ifnum\FLIPVERTEX=0
\global\advance\vertexmidx by #1 \global\advance\vertexmidy by #2
\setvertexC(0,\vertadj)[bl] \setvertexC(0,\negvertadj)[tr]
\setvertexC(\vertadj,0)[tl] \setvertexC(\negvertadj,0)[br]
\else % \FLIPPED case
\global\particleadjustx=#1 \global\particleadjusty=#2
\ifnum\LDIR=0 \global\multiply\particleadjustx by -1 \fi
\ifnum\LDIR=2 \global\multiply\particleadjusty by -1 \fi
\ifnum\LDIR=4 \global\multiply\particleadjustx by -1 \fi
\ifnum\LDIR=6 \global\multiply\particleadjusty by -1 \fi
\global\advance\vertexmidx by \particleadjustx
\global\advance\vertexmidy by \particleadjusty
\setvertexC(0,\negvertadj)[tl] \setvertexC(0,\vertadj)[br]
\setvertexC(\negvertadj,0)[tr] \setvertexC(\vertadj,0)[bl]
\fi
}
%
\gdef\NFOURVERT#1{
\ifnum\FLIPVERTEX=0 \setvertexB[\N\CURLY](\negvertadj,\vertadj)[#1]
\else \setvertexB[\N\FLIPPEDCURLY](\vertadj,\vertadj)[#1] \fi}
\gdef\SFOURVERT#1{
\ifnum\FLIPVERTEX=0 \setvertexB[\S\CURLY](\vertadj,\negvertadj)[#1]
\else \setvertexB[\S\FLIPPEDCURLY](\negvertadj,\negvertadj)[#1] \fi}
\gdef\EFOURVERT#1{
\ifnum\FLIPVERTEX=0 \setvertexB[\E\CURLY](\vertadj,\vertadj)[#1]
\else \setvertexB[\E\FLIPPEDCURLY](\vertadj,\negvertadj)[#1] \fi}
\gdef\WFOURVERT#1{
\ifnum\FLIPVERTEX=0 \setvertexB[\W\CURLY](\negvertadj,\negvertadj)[#1]
\else \setvertexB[\W\FLIPPEDCURLY](\negvertadj,\vertadj)[#1] \fi}
\gdef\diagFOURVERT#1[#2]{\setvertexB[#2\FLIPVERTEX](0,0)[#1]} %for\NE,\SE,\SW\NW
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% Utility Routines Used in Setting Up General Vertices %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
\gdef\setvertexA[#1#2]{
\global\savebox\vertexbox(0,0){
\begin{picture}(0,0)
%eg: \drawline\LINETYPE[\S\CENTRAL](0,0)[\unitboxnumber]
\global\adjx=#2
\ifnum\FLIPVERTEX=1 \global\advance\adjx by 1
\ifnum\VERTEXNUMBER=3 \global\FLIPVERTEX=0 \fi
\fi % Checks for flipped vertex and then Resets \FLIPVERTEX in 3-glue case.
\ifdim\STEMVERTEXONE=1pt\backstemmed \fi
\drawline\LINETYPE[#1\adjx](0,0)[\unitboxnumber]
\global\stemlength=\stemlengthcopy % Re-set to use-defined value.
\ifdim\VERTEXLINKONE=1pt\gluonlink \fi % For linking external gluons to vertex
\ifdim\VERTEXCAPONE=1pt\gluoncap \fi % For capping external gluons to vertex
\global\vertexmidx=\particlebackx \global\vertexmidy=\particlebacky
\end{picture}
}%end of \savebox
\global\multiply\vertexmidx by -1 \global\multiply\vertexmidy by -1
\global\advance\vertexmidx by \vertexonex
\global\advance\vertexmidy by \vertexoney
%eg: \drawline\LINETYPE[\S\CENTRAL](\vertexmidx,\vertexmidy)[\unitboxnumber]
\ifdim\STEMVERTEXONE=1pt\backstemmed \fi
\drawline\LINETYPE[#1\adjx](\vertexmidx,\vertexmidy)[\unitboxnumber]
\global\stemlength=\stemlengthcopy % Re-set to use-defined value.
\ifdim\VERTEXLINKONE=1pt\gluonlink \fi % For linking external gluons to vertex
\ifdim\VERTEXCAPONE=1pt\gluoncap \fi % For capping external gluons to vertex
} %End of \setvertexA
%
%
\gdef\setvertexB[#1#2](#3,#4)[#5]{
\global\adjx=\vertexmidx \global\adjy=\vertexmidy
\global\advance\adjx by #3 \global\advance\adjy by #4
\VERTEXLINE=#5
\ifcase\VERTEXLINE\UNIMPERROR %=0
\or \UNIMPERROR %line 1 %%%%%%%%%%%%%%%%%%%%%
\or \ifdim\STEMVERTEXTWO=1pt\backstemmed \fi % For stemming %
\or \ifdim\STEMVERTEXTHREE=1pt\backstemmed\fi % external gluons %
\or \ifdim\STEMVERTEXFOUR=1pt\backstemmed\fi % to vertex %
\else \UNIMPERROR %%%%%%%%%%%%%%%%%%%%%
\fi
\drawline\LINETYPE[#1#2](\adjx,\adjy)[\unitboxnumber]
\global\stemlength=\stemlengthcopy % Re-set to use-defined value.
\ifcase\VERTEXLINE\UNIMPERROR %=0
\or \UNIMPERROR %line 1
\or \ifdim\VERTEXLINKTWO=1pt\gluonlink \fi % For linking external gluons to vert
\ifdim\VERTEXCAPTWO=1pt\gluoncap \fi % For capping external gluons to vertex
\global\vertextwox=\particlebackx \global\vertextwoy=\particlebacky
\or \ifdim\VERTEXLINKTHREE=1pt\gluonlink\fi %For linking external gluons to vert
\ifdim\VERTEXCAPTHREE=1pt\gluoncap\fi %For capping external gluons to vertex
\global\vertexthreex=\particlebackx \global\vertexthreey=\particlebacky
\or \ifdim\VERTEXLINKFOUR=1pt\gluonlink\fi % For linking external gluons to vert
\ifdim\VERTEXCAPFOUR=1pt\gluoncap\fi % For capping external gluons to vertex
\global\vertexfourx=\particlebackx \global\vertexfoury=\particlebacky
\else \UNIMPERROR
\fi
}
\gdef\setvertexC(#1,#2)[#3#4]{
\global\adjx=\vertexmidx \global\adjy=\vertexmidy
\global\advance\adjx by #1 \global\advance\adjy by #2
\absstemlength=1250 % Default for 3-gluon vertex; \absstemlength unused var.
\ifnum \VERTEXNUMBER=4 \absstemlength=\vertadj\double\absstemlength \fi
\ifnum\phantomswitch=0
\put(\adjx,\adjy) {\oval(\absstemlength,\absstemlength)[#3#4]}\fi
}
\gdef\adjvert{\negvertadj=\vertadj \multiply\negvertadj by -1}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% LINKING GLUONS TO VERTICES %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
\gdef\vertexlink#1{
\global\VERTEXLINE=#1
\ifcase\VERTEXLINE\UNIMPERROR
\or \global\VERTEXLINKONE=1pt \or \global\VERTEXLINKTWO=1pt
\or \global\VERTEXLINKTHREE=1pt \or \global\VERTEXLINKFOUR=1pt
\else\UNIMPERROR\fi}
\gdef\vertexlinks{
\global\VERTEXLINKONE=1pt \global\VERTEXLINKTWO=1pt
\global\VERTEXLINKTHREE=1pt \global\VERTEXLINKFOUR=1pt }
% counters cleared by \clearvertex now defined in STEM section below.
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% CAPPING GLUONS ON VERTICES %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
\gdef\vertexcap#1{
\global\VERTEXLINE=#1
\ifcase\VERTEXLINE\UNIMPERROR
\or \global\VERTEXCAPONE=1pt \or \global\VERTEXCAPTWO=1pt
\or \global\VERTEXCAPTHREE=1pt \or \global\VERTEXCAPFOUR=1pt
\else\UNIMPERROR\fi}
\gdef\vertexcaps{
\global\VERTEXCAPONE=1pt \global\VERTEXCAPTWO=1pt
\global\VERTEXCAPTHREE=1pt \global\VERTEXCAPFOUR=1pt }
% counters cleared by \clearvertex now defined in STEM section below.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% LINKING STEMS TO VERTICES %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
\gdef\stemvertex#1{
\global\VERTEXLINE=#1
\ifcase\VERTEXLINE\UNIMPERROR
\or \global\STEMVERTEXONE=1pt \or \global\STEMVERTEXTWO=1pt
\or \global\STEMVERTEXTHREE=1pt \or \global\STEMVERTEXFOUR=1pt
\else\UNIMPERROR\fi}
\gdef\stemvertices{
\global\STEMVERTEXONE=1pt \global\STEMVERTEXTWO=1pt
\global\STEMVERTEXTHREE=1pt \global\STEMVERTEXFOUR=1pt }
\gdef\clearvertex{
\global\STEMVERTEXONE=0pt \global\STEMVERTEXTWO=0pt
\global\STEMVERTEXTHREE=0pt \global\STEMVERTEXFOUR=0pt
\global\VERTEXLINKONE=0pt \global\VERTEXLINKTWO=0pt
\global\VERTEXLINKTHREE=0pt \global\VERTEXLINKFOUR=0pt
\global\VERTEXCAPONE=0pt \global\VERTEXCAPTWO=0pt
\global\VERTEXCAPTHREE=0pt \global\VERTEXCAPFOUR=0pt
\global\stemlength=275} % Re-set default.
\global\stemlengthcopy=\stemlength
\clearvertex %set them to zero initially.
\global\stemlength=\stemlengthcopy